package com.example.design.singleton;

/**
 * @ClassName Singleton8
 * @Description Enum单例模式【推荐】
 * 枚举enum和静态代码块的特性相思，在使用枚举时，构造方法会被自动调用，也可以应用起这个特性实现单例设计模式
 * 借助了enum枚举类的特性，直接解决了多线程同步问题。
 * 线程安全性： 线程安全性
 * 是否懒加载： 懒加载
 * 性能： 性能好
 * @Author Administrator
 * @Date 2020/5/7 12:06
 * @Version 1.0
 */
public class Singleton8 {

    private Singleton8(){}

    public static Singleton8 getInstance(){
        return HolderEnum.INSTANCE.getInstance();
    }

    private enum HolderEnum{
        INSTANCE;
        private Singleton8 instance;
        HolderEnum(){
            instance = new Singleton8();
        }
        private Singleton8 getInstance(){
            return instance;
        }
    }

    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        Singleton8 s1 = Singleton8.getInstance();
        Singleton8 s2 = Singleton8.getInstance();
        s1.setName("zhangsan8");
        s2.setName("lisi8");
        System.out.println(s1.getName());
        System.out.println(s2.getName());
        System.out.println(s1.getName().equals(s2.getName()));
    }

}
